home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / GenAsm.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  67KB  |  1,328 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   GenAsm.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   26-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   26-Oct-91     1.00            Assembler Source Generator.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. extern struct MemoryChain       *Chain;
  22. extern UBYTE                     MainFontName[ 80 ];
  23. extern struct TextAttr           MainFont;
  24. extern struct Screen            *MainScreen;
  25. extern struct Window            *MainWindow;
  26. extern UBYTE                     MainFileName[ 512 ];
  27. extern UWORD                     MainDriPen[ NUMDRIPENS + 1 ];
  28. extern struct ColorSpec          MainColors[ 33 ];
  29. extern UBYTE                     MainScreenTitle[ 80 ];
  30. extern UBYTE                     MainWindowTitle[ 80 ];
  31. extern struct TagItem            nwTags[];
  32. extern struct TagItem            MainSTags[];
  33. extern struct ExtGadgetList      Gadgets;
  34. extern UWORD                     ActiveKind;
  35. extern struct Prefs              MainPrefs;
  36. extern BOOL                      Saved;
  37. extern struct NewMenu            Menus[];
  38. extern struct IntuiText         *WindowTxt;
  39. extern BOOL                      ws_InnerW, ws_InnerH, ws_ZoomF, ws_MQueue;
  40. extern BOOL                      ws_RQueue, ws_Adjust, cs_AutoScroll;
  41. extern WORD                      ws_IWidth, ws_IHeight, ws_ZLeft, ws_ZTop;
  42. extern WORD                      ws_ZWidth, ws_ZHeight, ws_MQue, ws_RQue;
  43. extern UWORD                     cs_ScreenType;
  44. extern ULONG                     WindowFlags, WindowIDCMP;
  45. extern UBYTE                    *gc_Kinds[], *gc_Types[];
  46. extern struct ExtMenuList        ExtMenus;
  47.  
  48. struct FileRequester            *ga_GenA = 0l;
  49.  
  50. UBYTE                            ga_APatt[32]  = "#?.s";
  51. UBYTE                            ga_AFile[32]  = "unnamed.s";
  52. UBYTE                            ga_APath[256];
  53.  
  54. UWORD                            ga_TagOffset, ga_GadOffset, ga_ScreenOffset;
  55.  
  56. struct TagItem                   ga_ATags[] = {
  57.     ASL_Hail,                   "Save Asm Source As...",
  58.     ASL_Window,                 0l,
  59.     ASL_File,                   ga_AFile,
  60.     ASL_Dir,                    ga_APath,
  61.     ASL_Pattern,                ga_APatt,
  62.     ASL_OKText,                 "Save",
  63.     ASL_FuncFlags,              FILF_SAVE | FILF_PATGAD,
  64.     TAG_DONE };
  65.  
  66. #define STAT                    ( MainPrefs.pr_PrefFlags0 & PRF_STATIC ) == PRF_STATIC
  67. #define RAW                     ( MainPrefs.pr_PrefFlags0 & PRF_RAW ) == PRF_RAW
  68. #define NSTAT                   ( MainPrefs.pr_PrefFlags0 & PRF_STATIC ) != PRF_STATIC
  69. #define NRAW                    ( MainPrefs.pr_PrefFlags0 & PRF_RAW ) != PRF_RAW
  70.  
  71. /*
  72.  * --- Write a single NewMenu structure.
  73.  */
  74. void WriteAsmNewMenu( BPTR file, struct ExtNewMenu *menu, UWORD num, BOOL what )
  75. {
  76.     ULONG flags;
  77.  
  78.     if ( what ) {
  79.         MyFPrintf( file, "%sNewMenu%ld:\n", &MainPrefs.pr_ProjectPrefix[0], num );
  80.  
  81.         if ( NRAW )
  82.             MyFPrintf( file, "    DC.B    %s,0\n", gc_Types[ menu->em_NewMenu.nm_Type ] );
  83.         else
  84.             MyFPrintf( file, "    DC.B    %ld,0\n", menu->em_NewMenu.nm_Type );
  85.         if ( menu->em_NewMenu.nm_Label != NM_BARLABEL )
  86.             MyFPrintf( file, "    DC.L    MName%ld\n", num );
  87.         else {
  88.             if ( NRAW )
  89.                 MyFPrintf( file, "    DC.L    NM_BARLABEL,0\n    DC.W    0\n    DC.L    0,0\n\n" );
  90.             else
  91.                 MyFPrintf( file, "    DC.L    $FFFFFFFF,0\n    DC.W    0\n    DC.L    0,0\n\n" );
  92.             return;
  93.         }
  94.         if ( menu->em_NewMenu.nm_CommKey )
  95.             MyFPrintf( file, "    DC.L    MComm%ld\n", num );
  96.         else
  97.             MyFPrintf( file, "    DC.L    0\n" );
  98.         if ( flags = menu->em_NewMenu.nm_Flags ) {
  99.             if ( NRAW ) {
  100.                 MyFPrintf( file, "    DC.W    " );
  101.                 if ( menu->em_NewMenu.nm_Type == NM_TITLE ) {
  102.                     if (( flags & NM_MENUDISABLED ) == NM_MENUDISABLED )
  103.                         MyFPrintf( file, "NM_MENUDISABLED|" );
  104.                 }  else {
  105.                     if (( flags & NM_ITEMDISABLED ) == NM_ITEMDISABLED )
  106.                         MyFPrintf( file, "NM_ITEMDISABLED|" );
  107.                 }
  108.                 if (( flags & CHECKIT ) == CHECKIT )
  109.                     MyFPrintf( file, "CHECKIT|" );
  110.                 if (( flags & CHECKED ) == CHECKED )
  111.                     MyFPrintf( file, "CHECKED|" );
  112.                 if (( flags & MENUTOGGLE ) == MENUTOGGLE )
  113.                     MyFPrintf( file, "MENUTOGGLE|" );
  114.  
  115.                 Seek( file, -1l, OFFSET_CURRENT );
  116.                 MyFPrintf( file, "\n" );
  117.             } else
  118.                 MyFPrintf( file, "    DC.W    $%04lx\n", flags );
  119.         } else
  120.             MyFPrintf( file, "    DC.W    0\n" );
  121.         MyFPrintf( file, "    DC.L    %ld,0\n\n", menu->em_NewMenu.nm_MutualExclude );
  122.     } else {
  123.  
  124.         MyFPrintf( file, "MName%ld:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", num, menu->em_NodeName );
  125.  
  126.         if ( menu->em_NewMenu.nm_CommKey )
  127.             MyFPrintf( file, "MComm%ld:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", num, &menu->em_ShortCut[0] );
  128.     }
  129. }
  130.  
  131. /*
  132.  * --- Write the NewMenu structures.
  133.  */
  134. void WriteAsmMenus( BPTR file )
  135. {
  136.     struct ExtNewMenu   *menu, *item, *sub;
  137.     UWORD                num = 0;
  138.  
  139.     if ( NOT ExtMenus.ml_First->em_Next )
  140.         return;
  141.  
  142.     for ( menu = ExtMenus.ml_First; menu->em_Next; menu = menu->em_Next ) {
  143.         WriteAsmNewMenu( file, menu, num++, 1 );
  144.         if ( menu->em_Items ) {
  145.             for ( item = menu->em_Items->ml_First;  item->em_Next; item = item->em_Next ) {
  146.                 WriteAsmNewMenu( file, item, num++, 1 );
  147.                 if ( item->em_Items ) {
  148.                     for ( sub = item->em_Items->ml_First;  sub->em_Next; sub = sub->em_Next )
  149.                         WriteAsmNewMenu( file, item, num++, 1 );
  150.                 }
  151.             }
  152.         }
  153.     }
  154.     if ( NRAW )
  155.         MyFPrintf( file, "    DC.B    NM_END,0\n    DC.L    0,0\n    DC.W    0\n    DC.L    0,0\n\n" );
  156.     else
  157.         MyFPrintf( file, "    DC.B    0,0\n    DC.L    0,0\n    DC.W    0\n    DC.L    0,0\n\n" );
  158.  
  159.     num = 0;
  160.  
  161.     for ( menu = ExtMenus.ml_First; menu->em_Next; menu = menu->em_Next ) {
  162.         WriteAsmNewMenu( file, menu, num++, 0 );
  163.         if ( menu->em_Items ) {
  164.             for ( item = menu->em_Items->ml_First;  item->em_Next; item = item->em_Next ) {
  165.                 WriteAsmNewMenu( file, item, num++, 0 );
  166.                 if ( item->em_Items ) {
  167.                     for ( sub = item->em_Items->ml_First;  sub->em_Next; sub = sub->em_Next )
  168.                         WriteAsmNewMenu( file, item, num++, 0 );
  169.                 }
  170.             }
  171.         }
  172.     }
  173. }
  174.  
  175. /*
  176.  * --- Write the GadgetID defines.
  177.  */
  178. void WriteAsmID( BPTR file )
  179. {
  180.     struct ExtNewGadget *eng;
  181.  
  182.     Renumber();
  183.  
  184.     for ( eng = Gadgets.gl_First; eng->en_Next; eng = eng->en_Next )
  185.         MyFPrintf( file, "GD_%-32s    EQU    %ld\n", &eng->en_SourceLabel[0], eng->en_NewGadget.ng_GadgetID );
  186.     MyFPrintf( file, "\n" );
  187. }
  188.  
  189.  
  190. /*
  191.  * --- Write the necessary xdef's.
  192.  */
  193. void WriteAsmXdef( BPTR file )
  194. {
  195.     MyFPrintf( file, "    XDEF    %sWnd\n", &MainPrefs.pr_ProjectPrefix[0] );
  196.     MyFPrintf( file, "    XDEF    %sScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  197.     MyFPrintf( file, "    XDEF    %sVisualInfo\n", &MainPrefs.pr_ProjectPrefix[0] );
  198.  
  199.     if ( Gadgets.gl_First->en_Next ) {
  200.         MyFPrintf( file, "    XDEF    %sGList\n", &MainPrefs.pr_ProjectPrefix[0] );
  201.         MyFPrintf( file, "    XDEF    %sGadgets\n", &MainPrefs.pr_ProjectPrefix[0], CountGadgets());
  202.     }
  203.  
  204.     if ( ExtMenus.ml_First->em_Next )
  205.         MyFPrintf( file, "    XDEF    %sMenus\n", &MainPrefs.pr_ProjectPrefix[0] );
  206.  
  207.     if ( ws_ZoomF )
  208.         MyFPrintf( file, "    XDEF    %sZoom\n", &MainPrefs.pr_ProjectPrefix[0], ws_ZLeft, ws_ZTop, ws_ZWidth, ws_ZHeight );
  209.  
  210.     MyFPrintf( file, "    XDEF    %sInitStuff\n", &MainPrefs.pr_ProjectPrefix[0] );
  211.     MyFPrintf( file, "    XDEF    %sCleanStuff\n", &MainPrefs.pr_ProjectPrefix[0] );
  212.     MyFPrintf( file, "\n" );
  213. }
  214.  
  215. /*
  216.  * --- Write the necessary globals.
  217.  */
  218. void WriteAsmGlob( BPTR file )
  219. {
  220.     UWORD cnt, ng = CountGadgets();
  221.     UBYTE                fname[32], *ptr;
  222.  
  223.     strcpy( fname, MainFontName );
  224.  
  225.     ptr = strchr( fname, '.' );
  226.     *ptr = 0;
  227.  
  228.     MyFPrintf( file, "%sWnd:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  229.     MyFPrintf( file, "%sScr:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  230.     MyFPrintf( file, "%sVisualInfo:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  231.  
  232.     if ( Gadgets.gl_First->en_Next ) {
  233.         MyFPrintf( file, "%sGList:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  234.         MyFPrintf( file, "%sGadgets:\n", &MainPrefs.pr_ProjectPrefix[0] );
  235.  
  236.         if ( CountGadgets() == 1 )
  237.             MyFPrintf( file, "%sGadget0:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  238.         else {
  239.             for ( cnt = 0; cnt < ng; cnt++ )
  240.                 MyFPrintf( file, "%sGadget%ld:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0], cnt );
  241.         }
  242.     }
  243.  
  244.     if ( ExtMenus.ml_First->em_Next ) {
  245.         MyFPrintf( file, "%sMenus:\n    DC.L    0\n", &MainPrefs.pr_ProjectPrefix[0] );
  246.         if ( NRAW )  {
  247.             MyFPrintf( file, "%sMTags0:\n    DC.L    GTMN_FrontPen,0,TAG_DONE\n", &MainPrefs.pr_ProjectPrefix[0] );
  248.             MyFPrintf( file, "%sMTags1:\n    DC.L    GTMN_TextAttr,%s%ld,TAG_DONE\n", &MainPrefs.pr_ProjectPrefix[0], fname, MainFont.ta_YSize );
  249.         }  else {
  250.             MyFPrintf( file, "%sMTags0:\n    DC.L    $%08lx,0,$%08lx\n", &MainPrefs.pr_ProjectPrefix[0], GTMN_FrontPen, TAG_DONE );
  251.             MyFPrintf( file, "%sMTags1:\n    DC.L    $%08lx,%s%ld,$%08lx\n", &MainPrefs.pr_ProjectPrefix[0], GTMN_TextAttr, fname, MainFont.ta_YSize, TAG_DONE );
  252.         }
  253.     }
  254.  
  255.     if ( ws_ZoomF )
  256.         MyFPrintf( file, "%sZoom:\n    DC.W    %ld,%ld,%ld,%ld\n", &MainPrefs.pr_ProjectPrefix[0], ws_ZLeft, ws_ZTop, ws_ZWidth, ws_ZHeight );
  257.  
  258.     MyFPrintf( file, "%sBufNewGad:\n    DC.W    0,0,0,0\n    DC.L    0,0\n    DC.W    0\n    DC.L    0,0,0\n", &MainPrefs.pr_ProjectPrefix[0] );
  259.  
  260.     if ( NOT cs_ScreenType )
  261.         MyFPrintf( file, "%sWB:\n    DC.B    'Workbench',0\n", &MainPrefs.pr_ProjectPrefix[0] );
  262.  
  263.     if  ( NRAW )
  264.         MyFPrintf( file, "%sTD:\n    DC.L    TAG_DONE\n", &MainPrefs.pr_ProjectPrefix[0] );
  265.     else
  266.         MyFPrintf( file, "%sTD:\n    DC.L    $%08lx\n", &MainPrefs.pr_ProjectPrefix[0], TAG_DONE );
  267.  
  268.     MyFPrintf( file, "\n" );
  269. }
  270.  
  271. /*
  272.  * --- Write the Asm Gadgets tags.
  273.  */
  274. void WriteAsmGadgetTags( BPTR file )
  275. {
  276.     struct ExtNewGadget *g;
  277.     UBYTE               *fmt = 0l, *str = 0l;
  278.     UWORD                num;
  279.  
  280.     for ( g = Gadgets.gl_First, num = 0; g->en_Next; g = g->en_Next, num++ ) {
  281.  
  282.         MyFPrintf( file, "%sTags:\n", &g->en_SourceLabel[0] );
  283.  
  284.         if ( NRAW ) {
  285.             switch ( g->en_Kind ) {
  286.  
  287.                 case    BUTTON_KIND:
  288.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  289.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  290.                     break;
  291.  
  292.                 case    CHECKBOX_KIND:
  293.                     if (( g->en_SpecialFlags & EGF_CHECKED ) == EGF_CHECKED )
  294.                         MyFPrintf( file, "    DC.L    GTCB_Checked,1\n" );
  295.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  296.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  297.                     break;
  298.  
  299.                 case    CYCLE_KIND:
  300.                     MyFPrintf( file, "    DC.L    GTCY_Labels,%sLabels\n", &g->en_SourceLabel[0] );
  301.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  302.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  303.                     break;
  304.  
  305.                 case    INTEGER_KIND:
  306.                     MyFPrintf( file, "    DC.L    GTIN_Number,%ld\n", g->en_DefInt );
  307.                     MyFPrintf( file, "    DC.L    GTIN_MaxChars,%ld\n", GetTagData( GTIN_MaxChars, 5l, g->en_Tags ));
  308.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  309.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  310.                     break;
  311.  
  312.                 case    LISTVIEW_KIND:
  313.                     if ( g->en_Entries.lh_Head->ln_Succ->ln_Succ )
  314.                         MyFPrintf( file, "    DC.L    GTLV_Labels,%sList\n", &g->en_SourceLabel[0] );
  315.                     else
  316.                         MyFPrintf( file, "    DC.L    GTLV_Labels,$FFFFFFFF\n" );
  317.                     if (( g->en_SpecialFlags & EGF_NEEDLOCK ) == EGF_NEEDLOCK )
  318.                         MyFPrintf( file, "    DC.L    GTLV_ShowSelected,%sGadget%ld\n", &MainPrefs.pr_ProjectPrefix[0], num - 1 );
  319.                     else if (MyTagInArray( GTLV_ShowSelected, g->en_Tags ))
  320.                         MyFPrintf( file, "    DC.L    GTLV_ShowSelected,0\n" );
  321.                     if ( MyTagInArray( GTLV_ScrollWidth, g->en_Tags ))
  322.                         MyFPrintf( file, "    DC.L    GTLV_ScrollWidth,%ld\n", g->en_ScrollWidth );
  323.                     if (( g->en_SpecialFlags & EGF_READONLY ) == EGF_READONLY )
  324.                         MyFPrintf( file, "    DC.L    GTLV_ReadOnly,1\n" );
  325.                     if ( MyTagInArray( LAYOUTA_Spacing, g->en_Tags ))
  326.                         MyFPrintf( file, "    DC.L    LAYOUTA_Spacing,%ld\n", g->en_Spacing );
  327.                     break;
  328.  
  329.                 case    MX_KIND:
  330.                     MyFPrintf( file, "    DC.L    GTMX_Labels,%sLabels\n", &g->en_SourceLabel[0] );
  331.                     if ( MyTagInArray( GTMX_Spacing, g->en_Tags ))
  332.                         MyFPrintf( file, "    DC.L    GTMX_Spacing,%ld\n", g->en_Spacing );
  333.                     break;
  334.  
  335.                 case    PALETTE_KIND:
  336.                     MyFPrintf( file, "    DC.L    GTPA_Depth,%ld\n", MainScreen->BitMap.Depth );
  337.                     if ( MyTagInArray( GTPA_IndicatorWidth, g->en_Tags ))
  338.                         MyFPrintf( file, "    DC.L    GTPA_IndicatorWidth,%ld\n", GetTagData( GTPA_IndicatorWidth, 0l, g->en_Tags ));
  339.                     if ( MyTagInArray( GTPA_IndicatorHeight, g->en_Tags ))
  340.                         MyFPrintf( file, "    DC.L    GTPA_IndicatorHeight,%ld\n", GetTagData( GTPA_IndicatorHeight, 0l, g->en_Tags ));
  341.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  342.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  343.                     break;
  344.  
  345.                 case    SCROLLER_KIND:
  346.                     if ( MyTagInArray( GTSC_Top, g->en_Tags ))
  347.                         MyFPrintf( file, "    DC.L    GTSC_Top,%ld\n", GetTagData( GTSC_Top, 0l, g->en_Tags ));
  348.                     if ( MyTagInArray( GTSC_Total, g->en_Tags ))
  349.                         MyFPrintf( file, "    DC.L    GTSC_Total,%ld\n", GetTagData( GTSC_Total, 0l, g->en_Tags ));
  350.                     if ( MyTagInArray( GTSC_Visible, g->en_Tags ))
  351.                         MyFPrintf( file, "    DC.L    GTSC_Visible,%ld\n", GetTagData( GTSC_Visible, 0l, g->en_Tags ));
  352.                     if ( MyTagInArray( GTSC_Arrows, g->en_Tags ))
  353.                         MyFPrintf( file, "    DC.L    GTSC_Arrows,%ld\n", g->en_ArrowSize );
  354.                     if ( MyTagInArray( PGA_Freedom, g->en_Tags ))
  355.                         MyFPrintf( file, "    DC.L    PGA_Freedom,LORIENT_VERT\n" );
  356.                     else
  357.                         MyFPrintf( file, "    DC.L    PGA_Freedom,LORIENT_HORIZ\n" );
  358.                     if ( MyTagInArray( GA_Immediate, g->en_Tags ))
  359.                         MyFPrintf( file, "    DC.L    GA_Immediate,1\n" );
  360.                     if ( MyTagInArray( GA_RelVerify, g->en_Tags ))
  361.                         MyFPrintf( file, "    DC.L    GA_RelVerify,1\n" );
  362.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  363.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n " );
  364.                     break;
  365.  
  366.                 case    SLIDER_KIND:
  367.                     if ( MyTagInArray( GTSL_Min, g->en_Tags ))
  368.                         MyFPrintf( file, "    DC.L    GTSL_Min,%ld\n", GetTagData( GTSL_Min, 0l, g->en_Tags ));
  369.                     if ( MyTagInArray( GTSL_Max, g->en_Tags ))
  370.                         MyFPrintf( file, "    DC.L    GTSL_Max,%ld\n", GetTagData( GTSL_Max, 0l, g->en_Tags ));
  371.                     if ( MyTagInArray( GTSL_Level, g->en_Tags ))
  372.                         MyFPrintf( file, "    DC.L    GTSL_Level,%ld\n", GetTagData( GTSL_Level, 0l, g->en_Tags ));
  373.                     if ( MyTagInArray( GTSL_MaxLevelLen, g->en_Tags ))
  374.                         MyFPrintf( file, "    DC.L    GTSL_MaxLevelLen,%ld\n", GetTagData( GTSL_MaxLevelLen, 0l, g->en_Tags ));
  375.                     if ( MyTagInArray( GTSL_LevelFormat, g->en_Tags )) {
  376.                         MyFPrintf( file, "    DC.L    GTSL_LevelFormat,%sFormat\n", &g->en_SourceLabel[0] );
  377.                         fmt = g->en_LevelFormat;
  378.                     }
  379.                     if ( MyTagInArray( GTSL_LevelPlace, g->en_Tags )) {
  380.                         MyFPrintf( file, "    DC.L    GTSL_LevelPlace," );
  381.                         WritePlaceFlags( file, (long)GetTagData( GTSL_LevelPlace, 0l, g->en_Tags ), 1l );
  382.                         Seek( file, -2, OFFSET_CURRENT );
  383.                         MyFPrintf( file, "\n" );
  384.                     }
  385.                     if ( MyTagInArray( PGA_Freedom, g->en_Tags ))
  386.                         MyFPrintf( file, "    DC.L    PGA_Freedom,LORIENT_VERT\n" );
  387.                     else
  388.                         MyFPrintf( file, "    DC.L    PGA_Freedom,LORIENT_HORIZ\n" );
  389.                     if ( MyTagInArray( GA_Immediate, g->en_Tags ))
  390.                         MyFPrintf( file, "    DC.L    GA_Immediate,1\n" );
  391.                     if ( MyTagInArray( GA_RelVerify, g->en_Tags ))
  392.                         MyFPrintf( file, "    DC.L    GA_RelVerify,1\n" );
  393.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  394.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  395.                     break;
  396.  
  397.                 case    STRING_KIND:
  398.                     if ( g->en_DefString ) {
  399.                         MyFPrintf( file, "    DC.L    GTST_String,%sString\n", &g->en_SourceLabel[0] );
  400.                         str = g->en_DefString;
  401.                     }
  402.                     MyFPrintf( file, "    DC.L    GTST_MaxChars,%ld\n", GetTagData( GTST_MaxChars, 5l, g->en_Tags ));
  403.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  404.                         MyFPrintf( file, "    DC.L    GA_Disabled,1\n" );
  405.                     break;
  406.             }
  407.             if ( MyTagInArray( GT_Underscore,  g->en_Tags ))
  408.                 MyFPrintf( file, "    DC.L    GT_Underscore,'_'\n" );
  409.  
  410.             MyFPrintf( file, "    DC.L    TAG_DONE\n\n" );
  411.         } else {
  412.             switch ( g->en_Kind ) {
  413.  
  414.                 case    BUTTON_KIND:
  415.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  416.                         MyFPrintf( file, "    DC.L    $08lx,1\n", GA_Disabled );
  417.                     break;
  418.  
  419.                 case    CHECKBOX_KIND:
  420.                     if (( g->en_SpecialFlags & EGF_CHECKED ) == EGF_CHECKED )
  421.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GTCB_Checked );
  422.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  423.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Disabled );
  424.                     break;
  425.  
  426.                 case    CYCLE_KIND:
  427.                     MyFPrintf( file, "    DC.L    $%08lx,%sLabels\n", GTCY_Labels, &g->en_SourceLabel[0] );
  428.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  429.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Disabled );
  430.                     break;
  431.  
  432.                 case    INTEGER_KIND:
  433.                     MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTIN_Number, g->en_DefInt );
  434.                     MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTIN_MaxChars, GetTagData( GTIN_MaxChars, 5l, g->en_Tags ));
  435.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  436.                         MyFPrintf( file, "    DC.L    %08lx,1\n", GA_Disabled );
  437.                     break;
  438.  
  439.                 case    LISTVIEW_KIND:
  440.                     if ( g->en_Entries.lh_Head->ln_Succ->ln_Succ )
  441.                         MyFPrintf( file, "    DC.L    $%08lx,%sList\n", GTLV_Labels, &g->en_SourceLabel[0] );
  442.                     else
  443.                         MyFPrintf( file, "    DC.L    $%08lx,$FFFFFFFF\n", GTLV_Labels );
  444.                     if (( g->en_SpecialFlags & EGF_NEEDLOCK ) == EGF_NEEDLOCK )
  445.                         MyFPrintf( file, "    DC.L    $%08lx,%sGadget%ld\n", GTLV_ShowSelected, &MainPrefs.pr_ProjectPrefix[0], num - 1 );
  446.                     else if (MyTagInArray( GTLV_ShowSelected, g->en_Tags ))
  447.                         MyFPrintf( file, "    DC.L    $%08lx,0\n", GTLV_ShowSelected );
  448.                     if ( MyTagInArray( GTLV_ScrollWidth, g->en_Tags ))
  449.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTLV_ScrollWidth, g->en_ScrollWidth );
  450.                     if (( g->en_SpecialFlags & EGF_READONLY ) == EGF_READONLY )
  451.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GTLV_ReadOnly );
  452.                     if ( MyTagInArray( LAYOUTA_Spacing, g->en_Tags ))
  453.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", LAYOUTA_Spacing, g->en_Spacing );
  454.                     break;
  455.  
  456.                 case    MX_KIND:
  457.                     MyFPrintf( file, "    DC.L    $%08lx,%sLabels\n", GTMX_Labels, &g->en_SourceLabel[0] );
  458.                     if ( MyTagInArray( GTMX_Spacing, g->en_Tags ))
  459.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTMX_Spacing, g->en_Spacing );
  460.                     break;
  461.  
  462.                 case    PALETTE_KIND:
  463.                     MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTPA_Depth, MainScreen->BitMap.Depth );
  464.                     if ( MyTagInArray( GTPA_IndicatorWidth, g->en_Tags ))
  465.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTPA_IndicatorWidth, GetTagData( GTPA_IndicatorWidth, 0l, g->en_Tags ));
  466.                     if ( MyTagInArray( GTPA_IndicatorHeight, g->en_Tags ))
  467.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTPA_IndicatorHeight, GetTagData( GTPA_IndicatorHeight, 0l, g->en_Tags ));
  468.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  469.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Disabled );
  470.                     break;
  471.  
  472.                 case    SCROLLER_KIND:
  473.                     if ( MyTagInArray( GTSC_Top, g->en_Tags ))
  474.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSC_Top, GetTagData( GTSC_Top, 0l, g->en_Tags ));
  475.                     if ( MyTagInArray( GTSC_Total, g->en_Tags ))
  476.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSC_Total, GetTagData( GTSC_Total, 0l, g->en_Tags ));
  477.                     if ( MyTagInArray( GTSC_Visible, g->en_Tags ))
  478.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSC_Visible, GetTagData( GTSC_Visible, 0l, g->en_Tags ));
  479.                     if ( MyTagInArray( GTSC_Arrows, g->en_Tags ))
  480.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSC_Arrows, g->en_ArrowSize );
  481.                     if ( MyTagInArray( PGA_Freedom, g->en_Tags ))
  482.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", PGA_Freedom, LORIENT_VERT );
  483.                     else
  484.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", PGA_Freedom, LORIENT_HORIZ );
  485.                     if ( MyTagInArray( GA_Immediate, g->en_Tags ))
  486.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Immediate );
  487.                     if ( MyTagInArray( GA_RelVerify, g->en_Tags ))
  488.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_RelVerify );
  489.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  490.                         MyFPrintf( file, "    DC.L    $%08lx,1\n ", GA_Disabled );
  491.                     break;
  492.  
  493.                 case    SLIDER_KIND:
  494.                     if ( MyTagInArray( GTSL_Min, g->en_Tags ))
  495.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSL_Min, GetTagData( GTSL_Min, 0l, g->en_Tags ));
  496.                     if ( MyTagInArray( GTSL_Max, g->en_Tags ))
  497.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSL_Max, GetTagData( GTSL_Max, 0l, g->en_Tags ));
  498.                     if ( MyTagInArray( GTSL_Level, g->en_Tags ))
  499.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSL_Level, GetTagData( GTSL_Level, 0l, g->en_Tags ));
  500.                     if ( MyTagInArray( GTSL_MaxLevelLen, g->en_Tags ))
  501.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTSL_MaxLevelLen, GetTagData( GTSL_MaxLevelLen, 0l, g->en_Tags ));
  502.                     if ( MyTagInArray( GTSL_LevelFormat, g->en_Tags )) {
  503.                         MyFPrintf( file, "    DC.L    $%08lx,%sFormat\n", GTSL_LevelFormat, &g->en_SourceLabel[0] );
  504.                         fmt = g->en_LevelFormat;
  505.                     }
  506.                     if ( MyTagInArray( GTSL_LevelPlace, g->en_Tags ))
  507.                         MyFPrintf( file, "    DC.L    $%08lx,$%04lx\n", GTSL_LevelPlace, GetTagData( GTSL_LevelPlace, 0l, g->en_Tags ));
  508.                     if ( MyTagInArray( PGA_Freedom, g->en_Tags ))
  509.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", PGA_Freedom, LORIENT_VERT );
  510.                     else
  511.                         MyFPrintf( file, "    DC.L    $%08lx,%ld\n", PGA_Freedom, LORIENT_HORIZ );
  512.                     if ( MyTagInArray( GA_Immediate, g->en_Tags ))
  513.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Immediate );
  514.                     if ( MyTagInArray( GA_RelVerify, g->en_Tags ))
  515.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_RelVerify );
  516.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  517.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Disabled );
  518.                     break;
  519.  
  520.                 case    STRING_KIND:
  521.                     if ( g->en_DefString ) {
  522.                         MyFPrintf( file, "    DC.L    $%08lx,%sString\n", GTST_String, &g->en_SourceLabel[0] );
  523.                         str = g->en_DefString;
  524.                     }
  525.                     MyFPrintf( file, "    DC.L    $%08lx,%ld\n", GTST_MaxChars, GetTagData( GTST_MaxChars, 5l, g->en_Tags ));
  526.                     if (( g->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  527.                         MyFPrintf( file, "    DC.L    $%08lx,1\n", GA_Disabled );
  528.                     break;
  529.             }
  530.             if ( MyTagInArray( GT_Underscore,  g->en_Tags ))
  531.                 MyFPrintf( file, "    DC.L    $%08lx,'_'\n", GT_Underscore );
  532.  
  533.             MyFPrintf( file, "    DC.L    $%08lx\n\n", TAG_DONE );
  534.         }
  535.  
  536.         if ( fmt ) {
  537.             MyFPrintf( file, "%sFormat:\n    DC.B    '%s',0\n    CNOP     0,2\n\n", &g->en_SourceLabel[0], g->en_LevelFormat );
  538.             fmt = 0l;
  539.         }
  540.  
  541.         if ( str ) {
  542.             MyFPrintf( file, "%sString:\n    DC.B    '%s',0\n    CNOP     0,2\n\n", &g->en_SourceLabel[0], g->en_DefString );
  543.             str = 0l;
  544.         }
  545.     }
  546. }
  547.  
  548. /*
  549.  * --- Write the GadgetTexts.
  550.  */
  551. void WriteAsmGText( BPTR file )
  552. {
  553.     struct ExtNewGadget *eng;
  554.  
  555.     for ( eng = Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  556.         if ( eng->en_NewGadget.ng_GadgetText )
  557.             MyFPrintf( file, "%sText:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", &eng->en_SourceLabel[0], &eng->en_GadgetText[0] );
  558.     }
  559. }
  560.  
  561.  
  562. /*
  563.  * --- Write the Cycle and Mx lables.
  564.  */
  565. void WriteAsmLabels( BPTR file )
  566. {
  567.     struct ExtNewGadget *eng;
  568.     UWORD                i, c = 0;
  569.  
  570.     for ( eng = Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  571.         if ( eng->en_Kind == CYCLE_KIND || eng->en_Kind == MX_KIND ) {
  572.             c = 0;
  573.             MyFPrintf( file, "%sLabels:\n", &eng->en_SourceLabel[0] );
  574.             for ( i = 0; i < 24; i++ ) {
  575.                 if ( eng->en_Labels[ i ] )
  576.                     MyFPrintf( file, "    DC.L    %sLab%ld\n", &eng->en_SourceLabel[0], c++ );
  577.             }
  578.             MyFPrintf( file, "    DC.L    0\n\n" );
  579.         }
  580.     }
  581.  
  582.     for ( eng = Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  583.         c = 0;
  584.         if ( eng->en_Kind == CYCLE_KIND || eng->en_Kind == MX_KIND ) {
  585.             for ( i = 0; i < 24; i++ ) {
  586.                 if ( eng->en_Labels[ i ] )
  587.                     MyFPrintf( file, "%sLab%ld:    DC.B    '%s',0\n    CNOP    0,2\n", &eng->en_SourceLabel[0], c++, eng->en_Labels[i] );
  588.             }
  589.             MyFPrintf( file, "\n" );
  590.         }
  591.     }
  592. }
  593.  
  594.  
  595. /*
  596.  * --- Write a single ListView Node.
  597.  */
  598. void WriteAsmNode( BPTR file, struct ExtNewGadget *eng, struct ListViewNode *node, WORD num )
  599. {
  600.     if ( node->ln_Succ != ( struct ListViewNode * )&eng->en_Entries.lh_Tail )
  601.         MyFPrintf( file, "    DC.L    %sNodes%ld\n", &eng->en_SourceLabel[0], num + 1 );
  602.     else
  603.         MyFPrintf( file, "    DC.L    %sList+4\n", &eng->en_SourceLabel[0] );
  604.  
  605.     if ( node->ln_Pred == ( struct ListViewNode * )&eng->en_Entries )
  606.         MyFPrintf( file, "    DC.L    %sList\n", &eng->en_SourceLabel[0] );
  607.     else
  608.         MyFPrintf( file, "    DC.L    %sNodes%ld\n", &eng->en_SourceLabel[0], num - 1 );
  609.  
  610.     MyFPrintf( file, "    DC.B    0,0\n    DC.L    %sName%ld\n\n", &eng->en_SourceLabel[0], num );
  611.  
  612.     MyFPrintf( file, "%sName%ld:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", &eng->en_SourceLabel[0], num, &node->ln_NameBytes[0] );
  613. }
  614.  
  615. /*
  616.  * --- Write the ListView entries.
  617.  */
  618. void WriteAsmList( BPTR file )
  619. {
  620.     struct ExtNewGadget *eng;
  621.     struct ListViewNode *node, *action;
  622.     WORD                 nodenum;
  623.  
  624.     for ( eng = Gadgets.gl_First; eng->en_Next; eng = eng->en_Next ) {
  625.         if ( eng->en_Kind == LISTVIEW_KIND ) {
  626.  
  627.             action = ( struct ListViewNode * )RemHead( &eng->en_Entries );
  628.  
  629.             if ( eng->en_Entries.lh_Head->ln_Succ ) {
  630.                 for ( node = eng->en_Entries.lh_Head, nodenum = 0; node->ln_Succ; node = node->ln_Succ, nodenum++ ) {
  631.                     MyFPrintf( file, "%sNodes%ld:\n", &eng->en_SourceLabel[0], nodenum );
  632.                     WriteAsmNode( file, eng, node, nodenum );
  633.                 }
  634.                 MyFPrintf( file, "%sList:\n", &eng->en_SourceLabel[0] );
  635.                 MyFPrintf( file, "    DC.L    %sNodes0,0,%sNodes%ld\n\n", &eng->en_SourceLabel[0], &eng->en_SourceLabel[0], nodenum - 1 );
  636.             }
  637.             AddHead( &eng->en_Entries, ( struct Node * )action );
  638.         }
  639.     }
  640. }
  641.  
  642. /*
  643.  * --- Write the TextAttr structure
  644.  */
  645. void WriteAsmTextAttr( BPTR file )
  646. {
  647.     struct ExtNewGadget *eng;
  648.     UBYTE                fname[32], *ptr;
  649.  
  650.     strcpy( fname, MainFontName );
  651.  
  652.     ptr = strchr( fname, '.' );
  653.     *ptr = 0;
  654.  
  655.     MyFPrintf( file, "%s%ld:\n", fname, MainFont.ta_YSize );
  656.     MyFPrintf( file, "    DC.L    %sFName%ld\n    DC.W    %ld\n    DC.B    $%02lx,$%02lx\n\n", fname, MainFont.ta_YSize, MainFont.ta_YSize, MainFont.ta_Style, MainFont.ta_Flags );
  657.     MyFPrintf( file, "%sFName%ld:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", fname, MainFont.ta_YSize, MainFontName );
  658. }
  659.  
  660. /*
  661.  * --- Write the Window Tags.
  662.  */
  663. void WriteAsmWTags( BPTR file )
  664. {
  665.     MyFPrintf( file, "%sWindowTags:\n", &MainPrefs.pr_ProjectPrefix[0] );
  666.  
  667.     if ( NRAW ) {
  668.         if ( MyTagInArray( WA_Left, nwTags ))
  669.             MyFPrintf( file, "    DC.L    WA_Left,%ld\n", GetTagData( WA_Left, 0l, nwTags ));
  670.         if ( MyTagInArray( WA_Top, nwTags ))
  671.             MyFPrintf( file, "    DC.L    WA_Top,%ld\n", GetTagData( WA_Top, 0l, nwTags ));
  672.         if ( ws_InnerW )
  673.             MyFPrintf( file, "    DC.L    WA_InnerWidth,%ld\n", ws_IWidth );
  674.         else
  675.             MyFPrintf( file, "    DC.L    WA_Width,%ld\n", MainWindow->Width);
  676.         if ( ws_InnerH )
  677.             MyFPrintf( file, "    DC.L    WA_InnerHeight,%ld\n", ws_IHeight );
  678.         else
  679.             MyFPrintf( file, "    DC.L    WA_Height,%ld\n", MainWindow->Height);
  680.         if ( MyTagInArray( WA_DetailPen, nwTags ))
  681.             MyFPrintf( file, "    DC.L    WA_DetailPen,%ld\n", GetTagData( WA_DetailPen, 0l, nwTags ));
  682.         if ( MyTagInArray( WA_BlockPen, nwTags ))
  683.              MyFPrintf( file, "    DC.L    WA_BlockPen,%ld\n", GetTagData( WA_BlockPen, 0l, nwTags ));
  684.         GetGadgetIDCMP();
  685.         MyFPrintf( file, "    DC.L    WA_IDCMP," );
  686.         WriteIDCMPFlags( file, WindowIDCMP, 1l);
  687.         Seek( file, -2l, OFFSET_CURRENT );
  688.         MyFPrintf( file, "\n" );
  689.         if ( MyTagInArray( WA_Flags, nwTags ))
  690.             MyFPrintf( file, "    DC.L    WA_Flags," );
  691.             WriteWindowFlags( file, GetTagData( WA_Flags, 0l, nwTags ), 1l);
  692.             Seek( file, -2l, OFFSET_CURRENT );
  693.             MyFPrintf( file, "\n" );
  694.         if ( Gadgets.gl_First->en_Next )
  695.             MyFPrintf( file, "%sWG:\n    DC.L    WA_Gadgets,0\n", &MainPrefs.pr_ProjectPrefix[0] );
  696.         if ( strlen( MainWindowTitle ))
  697.             MyFPrintf( file, "    DC.L    WA_Title,%sWTitle\n", &MainPrefs.pr_ProjectPrefix[0] );
  698.         if ( strlen( MainScreenTitle ))
  699.             MyFPrintf( file, "    DC.L    WA_ScreenTitle,%sSTitle\n", &MainPrefs.pr_ProjectPrefix[0] );
  700.         if ( cs_ScreenType ) {
  701.             if ( cs_ScreenType == 2 )
  702.                 MyFPrintf( file, "%sSC:\n    DC.L    WA_CustomScreen,0\n", &MainPrefs.pr_ProjectPrefix[0] );
  703.             if ( cs_ScreenType == 1 )
  704.                 MyFPrintf( file, "%sSC:\n    DC.L    WA_PubScreen,0\n", &MainPrefs.pr_ProjectPrefix[0] );
  705.         }
  706.         if ( MyTagInArray( WA_MinWidth, nwTags ))
  707.             MyFPrintf( file, "    DC.L    WA_MinWidth,%ld\n", GetTagData( WA_MinWidth, 0l, nwTags ));
  708.         if ( MyTagInArray( WA_MinHeight, nwTags ))
  709.             MyFPrintf( file, "    DC.L    WA_MinHeight,%ld\n", GetTagData( WA_MinHeight, 0l, nwTags ));
  710.         if ( MyTagInArray( WA_MaxWidth, nwTags ))
  711.             MyFPrintf( file, "    DC.L    WA_MaxWidth,%ld\n", GetTagData( WA_MaxWidth, 0l, nwTags ));
  712.         if ( MyTagInArray( WA_MaxHeight, nwTags ))
  713.             MyFPrintf( file, "    DC.L    WA_MaxHeight,%ld\n", GetTagData( WA_MaxHeight, 0l, nwTags ));
  714.         if ( ws_ZoomF )
  715.             MyFPrintf( file, "    DC.L    WA_Zoom,%sZoom\n", &MainPrefs.pr_ProjectPrefix[0] );
  716.         if ( ws_MQueue )
  717.             MyFPrintf( file, "    DC.L    WA_MouseQueue,%ld\n", ws_MQue);
  718.         if ( ws_RQueue )
  719.             MyFPrintf( file, "    DC.L    WA_RptQueue,%ld\n", ws_RQue );
  720.         if ( ws_Adjust )
  721.             MyFPrintf( file, "    DC.L    WA_AutoAdjust,1\n" );
  722.  
  723.         MyFPrintf( file, "    DC.L    TAG_DONE\n\n" );
  724.     } else {
  725.         if ( MyTagInArray( WA_Left, nwTags ))
  726.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_Left, GetTagData( WA_Left, 0l, nwTags ));
  727.         if ( MyTagInArray( WA_Top, nwTags ))
  728.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_Top, GetTagData( WA_Top, 0l, nwTags ));
  729.         if ( ws_InnerW )
  730.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_InnerWidth, ws_IWidth );
  731.         else
  732.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_Width, MainWindow->Width);
  733.         if ( ws_InnerH )
  734.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_InnerHeight, ws_IHeight );
  735.         else
  736.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_Height, MainWindow->Height);
  737.         if ( MyTagInArray( WA_DetailPen, nwTags ))
  738.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_DetailPen, GetTagData( WA_DetailPen, 0l, nwTags ));
  739.         if ( MyTagInArray( WA_BlockPen, nwTags ))
  740.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_BlockPen, GetTagData( WA_BlockPen, 0l, nwTags ));
  741.         GetGadgetIDCMP();
  742.         MyFPrintf( file, "    DC.L    $%08lx,$%08lx\n", WA_IDCMP, WindowIDCMP|IDCMP_REFRESHWINDOW );
  743.         if ( MyTagInArray( WA_Flags, nwTags ))
  744.             MyFPrintf( file, "    DC.L    $%08lx,$%08lx\n", WA_Flags, WindowFlags );
  745.         if ( Gadgets.gl_First->en_Next )
  746.             MyFPrintf( file, "%sWG:\n    DC.L    $%08lx,0\n", &MainPrefs.pr_ProjectPrefix[0], WA_Gadgets );
  747.         if ( strlen( MainWindowTitle ))
  748.             MyFPrintf( file, "    DC.L    $%08lx,%sWTitle\n", WA_Title, &MainPrefs.pr_ProjectPrefix[0] );
  749.         if ( strlen( MainScreenTitle ))
  750.             MyFPrintf( file, "    DC.L    $%08lx,%sSTitle\n", WA_ScreenTitle, &MainPrefs.pr_ProjectPrefix[0] );
  751.         if ( cs_ScreenType ) {
  752.             if ( cs_ScreenType == 2 )
  753.                 MyFPrintf( file, "%sSC:\n    DC.L    $%08lx,0\n", &MainPrefs.pr_ProjectPrefix[0], WA_CustomScreen );
  754.             if ( cs_ScreenType == 1 )
  755.                 MyFPrintf( file, "%sSC:\n    DC.L    $%08lx,0\n", &MainPrefs.pr_ProjectPrefix[0], WA_PubScreen );
  756.         }
  757.         if ( MyTagInArray( WA_MinWidth, nwTags ))
  758.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_MinWidth, GetTagData( WA_MinWidth, 0l, nwTags ));
  759.         if ( MyTagInArray( WA_MinHeight, nwTags ))
  760.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_MinHeight, GetTagData( WA_MinHeight, 0l, nwTags ));
  761.         if ( MyTagInArray( WA_MaxWidth, nwTags ))
  762.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_MaxWidth, GetTagData( WA_MaxWidth, 0l, nwTags ));
  763.         if ( MyTagInArray( WA_MaxHeight, nwTags ))
  764.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_MaxHeight, GetTagData( WA_MaxHeight, 0l, nwTags ));
  765.         if ( ws_ZoomF )
  766.             MyFPrintf( file, "    DC.L    $%08lx,%sZoom\n", WA_Zoom, &MainPrefs.pr_ProjectPrefix[0] );
  767.         if ( ws_MQueue )
  768.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_MouseQueue, ws_MQue);
  769.         if ( ws_RQueue )
  770.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", WA_RptQueue, ws_RQue );
  771.         if ( ws_Adjust )
  772.             MyFPrintf( file, "    DC.L    $%08lx,1\n", WA_AutoAdjust );
  773.  
  774.         MyFPrintf( file, "    DC.L    $%08lx\n\n", TAG_DONE );
  775.     }
  776.  
  777.     if ( strlen( MainWindowTitle ))
  778.         MyFPrintf( file, "%sWTitle:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", &MainPrefs.pr_ProjectPrefix[0], &MainWindowTitle[0] );
  779.     if ( strlen( MainScreenTitle ))
  780.         MyFPrintf( file, "%sSTitle:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", &MainPrefs.pr_ProjectPrefix[0], &MainScreenTitle[0] );
  781. }
  782.  
  783. /*
  784.  * --- Write the Screen Tags and screen specific data.
  785.  */
  786. void WriteAsmSTags( BPTR file )
  787. {
  788.     UWORD           cnt;
  789.     UBYTE           fname[32], *ptr;
  790.  
  791.     strcpy( fname, MainFontName );
  792.  
  793.     ptr = strchr( fname, '.' );
  794.     *ptr = 0;
  795.  
  796.     MyFPrintf( file, "%sScreenColors:\n", &MainPrefs.pr_ProjectPrefix[0] );
  797.  
  798.     for ( cnt = 0; cnt < 33; cnt++ ) {
  799.         if ( MainColors[ cnt ].ColorIndex != ~0 )
  800.             MyFPrintf( file, "    DC.W    %-2.2ld,$%02lx,$%02lx,$%02lx\n", MainColors[ cnt ].ColorIndex, MainColors[ cnt ].Red, MainColors[ cnt ].Green, MainColors[ cnt ].Blue );
  801.         else {
  802.             MyFPrintf( file, "    DC.W    $FFFF,$00,$00,$00\n\n" );
  803.             break;
  804.         }
  805.     }
  806.  
  807.     MyFPrintf( file, "%sDriPens:\n    DC.W    ", &MainPrefs.pr_ProjectPrefix[0] );
  808.  
  809.     for ( cnt = 0; cnt < NUMDRIPENS + 1; cnt++ ) {
  810.         if ( MainDriPen[ cnt ] != ~0 )
  811.             MyFPrintf( file, "%ld,", MainDriPen[ cnt ] );
  812.         else {
  813.             MyFPrintf( file, "$FFFF\n\n" );
  814.             break;
  815.         }
  816.     }
  817.  
  818.     MyFPrintf( file, "%sScreenTags:\n", &MainPrefs.pr_ProjectPrefix[0] );
  819.  
  820.     if ( NRAW ) {
  821.         if ( MyTagInArray( SA_Left, MainSTags ))
  822.             MyFPrintf( file, "    DC.L    SA_Left,%ld\n", GetTagData( SA_Left, 0l, MainSTags ));
  823.         if ( MyTagInArray( SA_Top, MainSTags ))
  824.             MyFPrintf( file, "    DC.L    SA_Top,%ld\n", GetTagData( SA_Top, 0l, MainSTags ));
  825.         if ( MyTagInArray( SA_Width, MainSTags ))
  826.             MyFPrintf( file, "    DC.L    SA_Width,%ld\n", GetTagData( SA_Width, 0l, MainSTags ));
  827.         if ( MyTagInArray( SA_Height, MainSTags ))
  828.             MyFPrintf( file, "    DC.L    SA_Height,%ld\n", GetTagData( SA_Height, 0l, MainSTags ));
  829.         if ( MyTagInArray( SA_Depth, MainSTags ))
  830.             MyFPrintf( file, "    DC.L    SA_Depth,%ld\n", GetTagData( SA_Depth, 0l, MainSTags ));
  831.         if ( MyTagInArray( SA_DetailPen, MainSTags ))
  832.             MyFPrintf( file, "    DC.L    SA_DetailPen,%ld\n", GetTagData( SA_DetailPen, 0l, MainSTags ));
  833.         if ( MyTagInArray( SA_BlockPen, MainSTags ))
  834.             MyFPrintf( file, "    DC.L    SA_BlockPen,%ld\n", GetTagData( SA_BlockPen, 0l, MainSTags ));
  835.         if ( MyTagInArray( SA_Colors, MainSTags ))
  836.             MyFPrintf( file, "    DC.L    SA_Colors,%sScreenColors\n", &MainPrefs.pr_ProjectPrefix[0] );
  837.         if ( MyTagInArray( SA_Font, MainSTags ))
  838.             MyFPrintf( file, "    DC.L    SA_Font,%s%ld\n", fname, MainFont.ta_YSize );
  839.         MyFPrintf( file, "    DC.L    SA_Type,CUSTOMSCREEN\n" );
  840.         if ( MyTagInArray( SA_DisplayID, MainSTags )) {
  841.             MyFPrintf( file, "    DC.L    SA_DisplayID," );
  842.             WriteIDFlags( file, GetTagData( SA_DisplayID, 0l, MainSTags ), 1l);
  843.             Seek( file, -2l, OFFSET_CURRENT );
  844.             MyFPrintf( file, "\n" );
  845.         }
  846.         if ( cs_AutoScroll )
  847.             MyFPrintf( file, "    DC.L    SA_AutoScroll,1\n" );
  848.         if ( MyTagInArray( SA_Pens, MainSTags ))
  849.             MyFPrintf( file, "    DC.L    SA_Pens,%sDriPens\n", &MainPrefs.pr_ProjectPrefix[0] );
  850.  
  851.         MyFPrintf( file, "    DC.L    TAG_DONE\n\n" );
  852.     } else {
  853.         if ( MyTagInArray( SA_Left, MainSTags ))
  854.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_Left, GetTagData( SA_Left, 0l, MainSTags ));
  855.         if ( MyTagInArray( SA_Top, MainSTags ))
  856.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_Top, GetTagData( SA_Top, 0l, MainSTags ));
  857.         if ( MyTagInArray( SA_Width, MainSTags ))
  858.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_Width, GetTagData( SA_Width, 0l, MainSTags ));
  859.         if ( MyTagInArray( SA_Height, MainSTags ))
  860.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_Height, GetTagData( SA_Height, 0l, MainSTags ));
  861.         if ( MyTagInArray( SA_Depth, MainSTags ))
  862.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_Depth, GetTagData( SA_Depth, 0l, MainSTags ));
  863.         if ( MyTagInArray( SA_DetailPen, MainSTags ))
  864.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_DetailPen, GetTagData( SA_DetailPen, 0l, MainSTags ));
  865.         if ( MyTagInArray( SA_BlockPen, MainSTags ))
  866.             MyFPrintf( file, "    DC.L    $%08lx,%ld\n", SA_BlockPen, GetTagData( SA_BlockPen, 0l, MainSTags ));
  867.         if ( MyTagInArray( SA_Colors, MainSTags ))
  868.             MyFPrintf( file, "    DC.L    $%08lx,%sScreenColors\n", SA_Colors, &MainPrefs.pr_ProjectPrefix[0] );
  869.         if ( MyTagInArray( SA_Font, MainSTags ))
  870.             MyFPrintf( file, "    DC.L    $%08lx,%s%ld\n", SA_Font, fname, MainFont.ta_YSize );
  871.         MyFPrintf( file, "    DC.L    $%08lx,$%04lx\n", SA_Type, CUSTOMSCREEN );
  872.         if ( MyTagInArray( SA_DisplayID, MainSTags ))
  873.             MyFPrintf( file, "    DC.L    $%08lx,$%08lx\n", SA_DisplayID, GetTagData( SA_DisplayID, 0l, MainSTags ));
  874.         if ( cs_AutoScroll )
  875.             MyFPrintf( file, "    DC.L    $%08lx,1\n", SA_AutoScroll );
  876.         if ( MyTagInArray( SA_Pens, MainSTags ))
  877.             MyFPrintf( file, "    DC.L    $%08lx,%sDriPens\n", SA_Pens, &MainPrefs.pr_ProjectPrefix[0] );
  878.  
  879.         MyFPrintf( file, "    DC.L    $%08lx\n\n", TAG_DONE );
  880.     }
  881. }
  882.  
  883. /*
  884.  * --- Write the C IntuiText structures.
  885.  */
  886. void WriteAsmIText( BPTR file )
  887. {
  888.     struct IntuiText   *t;
  889.     UWORD               i = 0;
  890.     UBYTE               fname[32], *ptr;
  891.  
  892.     strcpy( fname, MainFontName );
  893.  
  894.     ptr = strchr( fname, '.' );
  895.     *ptr = 0;
  896.  
  897.     if ( NOT( t = WindowTxt )) return;
  898.  
  899.     while ( t ) {
  900.         MyFPrintf( file, "%sText%ld:\n", &MainPrefs.pr_ProjectPrefix[0], i );
  901.         MyFPrintf( file, "    DC.B    %ld,%ld\n", t->FrontPen, t->BackPen );
  902.         if ( NRAW ) {
  903.             MyFPrintf( file, "    DC.B    " );
  904.             WriteCDrMd( file, t->DrawMode, 1l );
  905.             Seek( file, -2l, OFFSET_CURRENT );
  906.             MyFPrintf( file, "\n" );
  907.         } else
  908.             MyFPrintf( file, "    DC.B    $%02lx\n", t->DrawMode );
  909.         MyFPrintf( file, "    DC.B    0\n    DC.W    %ld,%ld\n", t->LeftEdge, t->TopEdge );
  910.         MyFPrintf( file, "    DC.L    %s%ld\n", fname, MainFont.ta_YSize );
  911.         MyFPrintf( file, "    DC.L    %sIText%ld\n", &MainPrefs.pr_ProjectPrefix[0], i );
  912.  
  913.         if ( t->NextText )
  914.             MyFPrintf( file, "    DC.L    %sText%ld\n\n", &MainPrefs.pr_ProjectPrefix[0], i + 1 );
  915.         else
  916.             MyFPrintf( file, "    DC.L    0\n\n" );
  917.  
  918.         MyFPrintf( file, "%sIText%ld:\n    DC.B    '%s',0\n    CNOP    0,2\n\n", &MainPrefs.pr_ProjectPrefix[0], i, t->IText );
  919.  
  920.         i++;
  921.         t = t->NextText;
  922.     }
  923. }
  924.  
  925. /*
  926.  * --- Write the C Gadgets initialization.
  927.  */
  928. void WriteAsmGadgets( BPTR file )
  929. {
  930.     struct ExtNewGadget *g, *pred;
  931.     struct NewGadget    *ng, *ngp;
  932.  
  933.     for ( g = Gadgets.gl_First; g->en_Next; g = g->en_Next ) {
  934.         if (( pred = g->en_Prev ) == ( struct ExtNewGadget * )&Gadgets ) {
  935.             pred = 0l;
  936.             ngp  = 0l;
  937.         } else
  938.             ngp = &pred->en_NewGadget;
  939.  
  940.         ng = &g->en_NewGadget;
  941.  
  942.         if ( NRAW ) {
  943.             if ( ngp ) {
  944.                 if ( g->en_Kind != STRING_KIND ) {
  945.                     if ( ng->ng_LeftEdge != ngp->ng_LeftEdge )
  946.                         MyFPrintf( file, "    move.w  #%ld,gng_LeftEdge(a1)\n", ng->ng_LeftEdge );
  947.                     if ( ng->ng_TopEdge  != ngp->ng_TopEdge )
  948.                         MyFPrintf( file, "    move.w  #%ld,gng_TopEdge(a1)\n", ng->ng_TopEdge );
  949.                 } else {
  950.                     if (( g->en_SpecialFlags & EGF_ISLOCKED ) != EGF_ISLOCKED ) {
  951.                         if ( ng->ng_LeftEdge != ngp->ng_LeftEdge )
  952.                             MyFPrintf( file, "    move.w  #%ld,gng_LeftEdge(a1)\n", ng->ng_LeftEdge );
  953.                         if ( ng->ng_TopEdge  != ngp->ng_TopEdge )
  954.                             MyFPrintf( file, "    move.w  #%ld,gng_TopEdge(a1)\n", ng->ng_TopEdge );
  955.                     }
  956.                 }
  957.  
  958.                 if ( g->en_Kind != MX_KIND && g->en_Kind != CHECKBOX_KIND ) {
  959.                     if ( ng->ng_Width != ngp->ng_Width )
  960.                         MyFPrintf( file, "    move.w  #%ld,gng_Width(a1)\n", ng->ng_Width );
  961.                     if ( ng->ng_Height != ngp->ng_Height )
  962.                         MyFPrintf( file, "    move.w  #%ld,gng_Height(a1)\n", ng->ng_Height );
  963.                 }
  964.                 if ( ng->ng_GadgetText ) {
  965.                     if ( strcmp( ng->ng_GadgetText, ngp->ng_GadgetText ))
  966.                         MyFPrintf( file, "    move.l  #%sText,gng_GadgetText(a1)\n", &g->en_SourceLabel[0] );
  967.                 } else
  968.                         MyFPrintf( file, "    move.l  #0,gng_GadgetText(a1)\n" );
  969.                 MyFPrintf( file, "    move.w  #GD_%s,gng_GadgetID(a1)\n", &g->en_SourceLabel[0] );
  970.                 if ( ng->ng_Flags != ngp->ng_Flags ) {
  971.                     MyFPrintf( file, "    move.l  #" );
  972.                     WritePlaceFlags( file, (long)ng->ng_Flags, 1l );
  973.                     Seek( file, -2, OFFSET_CURRENT );
  974.                     MyFPrintf( file, ",gng_Flags(a1)\n" );
  975.                 }
  976.             } else {
  977.                 MyFPrintf( file, "    move.w  #%ld,gng_LeftEdge(a1)\n", ng->ng_LeftEdge );
  978.                 MyFPrintf( file, "    move.w  #%ld,gng_TopEdge(a1)\n", ng->ng_TopEdge );
  979.                 MyFPrintf( file, "    move.w  #%ld,gng_Width(a1)\n", ng->ng_Width );
  980.                 MyFPrintf( file, "    move.w  #%ld,gng_Height(a1)\n", ng->ng_Height );
  981.                 if ( ng->ng_GadgetText )
  982.                     MyFPrintf( file, "    move.l  #%sText,gng_GadgetText(a1)\n", &g->en_SourceLabel[0] );
  983.                 else
  984.                     MyFPrintf( file, "    move.l  #0,gng_GadgetText(a1)\n" );
  985.                 MyFPrintf( file, "    move.w  #GD_%s,gng_GadgetID(a1)\n", &g->en_SourceLabel[0] );
  986.                 MyFPrintf( file, "    move.l  #" );
  987.                 WritePlaceFlags( file, ng->ng_Flags, 1l );
  988.                 Seek( file, -2l, OFFSET_CURRENT );
  989.                 MyFPrintf( file, ",gng_Flags(a1)\n" );
  990.             }
  991.         } else {
  992.             if ( ngp ) {
  993.                 if ( g->en_Kind != STRING_KIND ) {
  994.                     if ( ng->ng_LeftEdge != ngp->ng_LeftEdge )
  995.                         MyFPrintf( file, "    move.w  #%ld,(a1)\n", ng->ng_LeftEdge );
  996.                     if ( ng->ng_TopEdge  != ngp->ng_TopEdge )
  997.                         MyFPrintf( file, "    move.w  #%ld,2(a1)\n", ng->ng_TopEdge );
  998.                 } else {
  999.                     if (( g->en_SpecialFlags & EGF_ISLOCKED ) != EGF_ISLOCKED ) {
  1000.                         if ( ng->ng_LeftEdge != ngp->ng_LeftEdge )
  1001.                             MyFPrintf( file, "    move.w  #%ld,(a1)\n", ng->ng_LeftEdge );
  1002.                         if ( ng->ng_TopEdge  != ngp->ng_TopEdge )
  1003.                             MyFPrintf( file, "    move.w  #%ld,2(a1)\n", ng->ng_TopEdge );
  1004.                     }
  1005.                 }
  1006.  
  1007.                 if ( g->en_Kind != MX_KIND && g->en_Kind != CHECKBOX_KIND ) {
  1008.                     if ( ng->ng_Width != ngp->ng_Width )
  1009.                         MyFPrintf( file, "    move.w  #%ld,4(a1)\n", ng->ng_Width );
  1010.                     if ( ng->ng_Height != ngp->ng_Height )
  1011.                         MyFPrintf( file, "    move.w  #%ld,6(a1)\n", ng->ng_Height );
  1012.                 }
  1013.                 if ( ng->ng_GadgetText ) {
  1014.                     if ( strcmp( ng->ng_GadgetText, ngp->ng_GadgetText ))
  1015.                         MyFPrintf( file, "    move.l  #%sText,8(a1)\n", &g->en_SourceLabel[0] );
  1016.                 } else
  1017.                         MyFPrintf( file, "    move.l  #0,8(a1)\n" );
  1018.                 MyFPrintf( file, "    move.w  #GD_%s,16(a1)\n", &g->en_SourceLabel[0] );
  1019.                 if ( ng->ng_Flags != ngp->ng_Flags )
  1020.                     MyFPrintf( file, "    move.l  #$%08lx,18(a1)\n", ng->ng_Flags );
  1021.             } else {
  1022.                 MyFPrintf( file, "    move.w  #%ld,(a1)\n", ng->ng_LeftEdge );
  1023.                 MyFPrintf( file, "    move.w  #%ld,2(a1)\n", ng->ng_TopEdge );
  1024.                 MyFPrintf( file, "    move.w  #%ld,4(a1)\n", ng->ng_Width );
  1025.                 MyFPrintf( file, "    move.w  #%ld,6(a1)\n", ng->ng_Height );
  1026.                 if ( ng->ng_GadgetText )
  1027.                     MyFPrintf( file, "    move.l  #%sText,8(a1)\n", &g->en_SourceLabel[0] );
  1028.                 else
  1029.                     MyFPrintf( file, "    move.l  #0,8(a1)\n" );
  1030.                 MyFPrintf( file, "    move.w  #GD_%s,16(a1)\n", &g->en_SourceLabel[0] );
  1031.                 MyFPrintf( file, "    move.l  #$%08lx,18(a1)\n", ng->ng_Flags );
  1032.             }
  1033.         }
  1034.  
  1035.         MyFPrintf( file, "    move.l  #%ld,d0\n", g->en_Kind );
  1036.         MyFPrintf( file, "    lea.l   %sTags,a2\n", &g->en_SourceLabel[0] );
  1037.         MyFPrintf( file, "    jsr     CreateGadgetA(a6)\n" );
  1038.  
  1039.         if ( g != Gadgets.gl_Last ) {
  1040.             MyFPrintf( file, "    move.l  d0,a0\n" );
  1041.             MyFPrintf( file, "    lea.l   %sBufNewGad,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1042.         }
  1043.     }
  1044. }
  1045.  
  1046. /*
  1047.  * --- Write the Assembler cleanup routine.
  1048.  */
  1049. void WriteAsmCleanup( BPTR file )
  1050. {
  1051.     MyFPrintf( file, "%sCleanStuff:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1052.     MyFPrintf( file, "    movem.l d0-d7/a0-a6,-(sp)\n" );
  1053.     if ( ExtMenus.ml_First->em_Next ) {
  1054.         MyFPrintf( file, "    move.l   _IntuitionBase,a6\n" );
  1055.         MyFPrintf( file, "    move.l   %sMenus,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1056.         MyFPrintf( file, "    cmpa.l   #0,a0\n" );
  1057.         MyFPrintf( file, "    beq      %sNMenu\n", &MainPrefs.pr_ProjectPrefix[0] );
  1058.         MyFPrintf( file, "    move.l   %sWnd,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1059.         MyFPrintf( file, "    jsr      ClearMenuStrip(a6)\n" );
  1060.         MyFPrintf( file, "    move.l   _GadToolsBase,a6\n"  );
  1061.         MyFPrintf( file, "    move.l   %sMenus,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1062.         MyFPrintf( file, "    jsr      FreeMenus(a6)\n" );
  1063.         MyFPrintf( file, "%sNMenu:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1064.     }
  1065.     MyFPrintf( file, "    move.l  _IntuitionBase,a6\n" );
  1066.     MyFPrintf( file, "    move.l  %sWnd,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1067.     MyFPrintf( file, "    cmpa.l  #0,a0\n" );
  1068.     MyFPrintf( file, "    beq     %sNWnd\n", &MainPrefs.pr_ProjectPrefix[0] );
  1069.     MyFPrintf( file, "    jsr     CloseWindow(a6)\n" );
  1070.     MyFPrintf( file, "%sNWnd:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1071.     if ( Gadgets.gl_First->en_Next ) {
  1072.         MyFPrintf( file, "    move.l  _GadToolsBase,a6\n" );
  1073.         MyFPrintf( file, "    move.l  %sGList,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1074.         MyFPrintf( file, "    cmpa.l  #0,a0\n" );
  1075.         MyFPrintf( file, "    beq     %sNGad\n", &MainPrefs.pr_ProjectPrefix[0] );
  1076.         MyFPrintf( file, "    jsr     FreeGadgets(a6)\n" );
  1077.         MyFPrintf( file, "%sNGad:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1078.     } else MyFPrintf( file, "    move.l  _GadToolsBase,a6\n" );
  1079.  
  1080.     MyFPrintf( file, "    move.l  %sVisualInfo,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1081.     MyFPrintf( file, "    cmpa.l  #0,a0\n" );
  1082.     MyFPrintf( file, "    beq     %sNVis\n", &MainPrefs.pr_ProjectPrefix[0] );
  1083.     MyFPrintf( file, "    jsr     FreeVisualInfo(a6)\n" );
  1084.     MyFPrintf( file, "%sNVis:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1085.     MyFPrintf( file, "    move.l  _IntuitionBase,a6\n" );
  1086.     if ( cs_ScreenType == 2 ) {
  1087.         MyFPrintf( file, "    move.l  %sScr,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1088.         MyFPrintf( file, "    cmpa.l  #0,a0\n" );
  1089.         MyFPrintf( file, "    beq     %sNScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  1090.         MyFPrintf( file, "    jsr     CloseScreen(a6)\n" );
  1091.     } else  {
  1092.         MyFPrintf( file, "    suba.l  a0,a0\n" );
  1093.         MyFPrintf( file, "    move.l  %sScr,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1094.         MyFPrintf( file, "    cmpa.l  #0,a1\n" );
  1095.         MyFPrintf( file, "    beq     %sNScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  1096.         MyFPrintf( file, "    jsr     UnlockPubScreen(a6)\n" );
  1097.     }
  1098.     MyFPrintf( file, "%sNScr:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1099.     MyFPrintf( file, "    movem.l (sp)+,d0-d7/a0-a6\n    rts\n" );
  1100. }
  1101.  
  1102. /*
  1103.  * --- Write the Assembler Source file.
  1104.  */
  1105. long WriteAsmSource( void )
  1106. {
  1107.     BPTR                file = 0l;
  1108.     UBYTE                fname[32], *ptr;
  1109.     UWORD                num;
  1110.  
  1111.     strcpy( fname, MainFontName );
  1112.  
  1113.     ptr  = strchr( fname, '.' );
  1114.     *ptr = 0;
  1115.  
  1116.     if ( ga_GenA = AllocAslRequest( ASL_FileRequest, TAG_DONE )) {
  1117.         ga_ATags[1].ti_Data = MainWindow;
  1118.         if ( AslRequest( ga_GenA, ga_ATags )) {
  1119.  
  1120.             strcpy( MainFileName, ga_GenA->rf_Dir );
  1121.             CheckDirExtension();
  1122.             strcat( MainFileName, ga_GenA->rf_File );
  1123.  
  1124.             strcpy( ga_APath, ga_GenA->rf_Dir );
  1125.             strcpy( ga_AFile, ga_GenA->rf_File );
  1126.             strcpy( ga_APatt, ga_GenA->rf_Pat );
  1127.  
  1128.             if ( file = MyOpen( MODE_NEWFILE )) {
  1129.  
  1130.                 SetTitle( "Saving Assembly Source..." );
  1131.  
  1132.                 SetIoErr( 0l );
  1133.  
  1134.                 MyFPrintf( file, "*\n*  Source generated with GadToolsBox V1.0\n" );
  1135.                 MyFPrintf( file, "*  which is (c) Copyright 1991 Jaba Development\n" );
  1136.                 MyFPrintf( file, "*\n\n" );
  1137.  
  1138.                 if ( NRAW )  {
  1139.                     MyFPrintf( file, "    include 'exec/types.i'\n    include 'intuition/intuition.i'\n" );
  1140.                     MyFPrintf( file, "    include 'intuition/gadgetclass.i'\n    include 'libraries/gadtools.i'\n" );
  1141.                     MyFPrintf( file, "    include 'graphics/displayinfo.i'\n\n" );
  1142.                 }
  1143.  
  1144.                 MyFPrintf( file, "    XREF    _GadToolsBase\n    XREF    _IntuitionBase\n\n" );
  1145.                 MyFPrintf( file, "OpenScreenTagList    EQU    -612\n" );
  1146.                 MyFPrintf( file, "OpenWindowTagList    EQU    -606\n" );
  1147.                 MyFPrintf( file, "CloseScreen          EQU    -66\n" );
  1148.                 MyFPrintf( file, "CloseWindow          EQU    -72\n" );
  1149.                 MyFPrintf( file, "PrintIText           EQU    -216\n" );
  1150.                 MyFPrintf( file, "LockPubScreen        EQU    -510\n" );
  1151.                 MyFPrintf( file, "UnlockPubScreen      EQU    -516\n" );
  1152.                 MyFPrintf( file, "SetMenuStrip         EQU    -264\n" );
  1153.                 MyFPrintf( file, "ClearMenuStrip       EQU    -54\n" );
  1154.                 MyFPrintf( file, "GetVisualInfoA       EQU    -126\n" );
  1155.                 MyFPrintf( file, "FreeVisualInfo       EQU    -132\n" );
  1156.                 MyFPrintf( file, "CreateContext        EQU    -114\n" );
  1157.                 MyFPrintf( file, "CreateGadgetA        EQU    -30\n" );
  1158.                 MyFPrintf( file, "GT_RefreshWindow     EQU    -84\n" );
  1159.                 MyFPrintf( file, "FreeGadgets          EQU    -36\n" );
  1160.                 MyFPrintf( file, "CreateMenusA         EQU    -48\n" );
  1161.                 MyFPrintf( file, "LayoutMenusA         EQU    -66\n" );
  1162.                 MyFPrintf( file, "FreeMenus            EQU    -54\n\n" );
  1163.  
  1164.                 WriteAsmID( file );
  1165.  
  1166.                 if ( NSTAT )
  1167.                     WriteAsmXdef( file );
  1168.  
  1169.                 WriteAsmGlob( file);
  1170.                 WriteAsmGadgetTags( file );
  1171.                 WriteAsmGText( file );
  1172.                 WriteAsmLabels( file );
  1173.                 WriteAsmList( file );
  1174.                 WriteAsmTextAttr( file );
  1175.                 WriteAsmWTags( file );
  1176.  
  1177.                 if ( cs_ScreenType == 2 )
  1178.                     WriteAsmSTags( file );
  1179.  
  1180.                 WriteAsmIText( file );
  1181.                 if ( ExtMenus.ml_First->em_Next )
  1182.                     WriteAsmMenus( file  );
  1183.  
  1184.                 MyFPrintf( file, "%sInitStuff:\n", &MainPrefs.pr_ProjectPrefix[0] );
  1185.                 MyFPrintf( file, "    movem.l d1-d7/a0-a6,-(sp)\n" );
  1186.                 MyFPrintf( file, "    move.l  _IntuitionBase,a6\n" );
  1187.  
  1188.                 if ( NOT cs_ScreenType ) {
  1189.                     MyFPrintf( file, "    lea.l   %sWB,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1190.                     MyFPrintf( file, "    jsr     LockPubScreen(a6)\n" );
  1191.                     MyFPrintf( file, "    move.l  d0,%sScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  1192.                     MyFPrintf( file, "    beq     %sSError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1193.                 } else if ( cs_ScreenType == 1 ) {
  1194.                     MyFPrintf( file, "    suba.l  a0,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1195.                     MyFPrintf( file, "    jsr     LockPubScreen(a6)\n" );
  1196.                     MyFPrintf( file, "    move.l  d0,%sScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  1197.                     MyFPrintf( file, "    beq     %sSError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1198.                     MyFPrintf( file, "    move.l  d0,%sSC+4\n", &MainPrefs.pr_ProjectPrefix[0] );
  1199.                 } else {
  1200.                     MyFPrintf( file, "    suba.l  a0,a0\n" );
  1201.                     MyFPrintf( file, "    lea.l   %sScreenTags,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1202.                     MyFPrintf( file, "    jsr     OpenScreenTagList(a6)\n" );
  1203.                     MyFPrintf( file, "    move.l  d0,%sScr\n", &MainPrefs.pr_ProjectPrefix[0] );
  1204.                     MyFPrintf( file, "    beq     %sSError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1205.                     MyFPrintf( file, "    move.l  d0,%sSC+4\n", &MainPrefs.pr_ProjectPrefix[0] );
  1206.                 }
  1207.  
  1208.                 MyFPrintf( file, "    move.l  _GadToolsBase,a6\n" );
  1209.                 MyFPrintf( file, "    move.l  %sScr,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1210.                 MyFPrintf( file, "    lea.l   %sTD,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1211.                 MyFPrintf( file, "    jsr     GetVisualInfoA(a6)\n" );
  1212.                 MyFPrintf( file, "    move.l  d0,%sVisualInfo\n", &MainPrefs.pr_ProjectPrefix[0] );
  1213.                 MyFPrintf( file, "    beq     %sVError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1214.  
  1215.                 if ( Gadgets.gl_First->en_Next ) {
  1216.                     MyFPrintf( file, "    lea.l   %sGList,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1217.                     MyFPrintf( file, "    jsr     CreateContext(a6)\n" );
  1218.                     MyFPrintf( file, "    move.l  d0,a0\n", );
  1219.                     MyFPrintf( file, "    beq     %sCError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1220.  
  1221.                     MyFPrintf( file, "    lea.l   %sBufNewGad,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1222.  
  1223.                     if ( NRAW ) {
  1224.                         MyFPrintf( file, "    move.l  %sVisualInfo,gng_VisualInfo(a1)\n", &MainPrefs.pr_ProjectPrefix[0] );
  1225.                         MyFPrintf( file, "    move.l  #%s%ld,gng_TextAttr(a1)\n", fname, MainFont.ta_YSize );
  1226.                     } else {
  1227.                         MyFPrintf( file, "    move.l  %sVisualInfo,22(a1)\n", &MainPrefs.pr_ProjectPrefix[0] );
  1228.                         MyFPrintf( file, "    move.l  #%s%ld,12(a1)\n", fname, MainFont.ta_YSize );
  1229.                     }
  1230.  
  1231.                     WriteAsmGadgets( file );
  1232.  
  1233.                     MyFPrintf( file, "    tst.l   d0\n" );
  1234.                     MyFPrintf( file, "    beq     %sGError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1235.                     MyFPrintf( file, "    move.l  %sGList,%sWG+4\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1236.                 }
  1237.  
  1238.                 if ( ExtMenus.ml_First->em_Next ) {
  1239.                     MyFPrintf( file, "    lea.l   %sNewMenu0,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1240.                     MyFPrintf( file, "    lea.l   %sMTags0,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1241.                     MyFPrintf( file, "    jsr     CreateMenusA(a6)\n" );
  1242.                     MyFPrintf( file, "    move.l  d0,%sMenus\n", &MainPrefs.pr_ProjectPrefix[0] );
  1243.                     MyFPrintf( file, "    beq     %sMError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1244.                     MyFPrintf( file, "    move.l  d0,a0\n" );
  1245.                     MyFPrintf( file, "    move.l  %sVisualInfo,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1246.                     MyFPrintf( file, "    lea.l   %sMTags1,a2\n", &MainPrefs.pr_ProjectPrefix[0] );
  1247.                     MyFPrintf( file, "    jsr     LayoutMenusA(a6)\n" );
  1248.                 }
  1249.  
  1250.                 MyFPrintf( file, "    move.l  _IntuitionBase,a6\n" );
  1251.                 MyFPrintf( file, "    suba.l  a0,a0\n" );
  1252.                 MyFPrintf( file, "    lea.l   %sWindowTags,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1253.                 MyFPrintf( file, "    jsr     OpenWindowTagList(a6)\n" );
  1254.                 MyFPrintf( file, "    move.l  d0,%sWnd\n", &MainPrefs.pr_ProjectPrefix[0] );
  1255.                 MyFPrintf( file, "    beq     %sWError\n", &MainPrefs.pr_ProjectPrefix[0] );
  1256.  
  1257.                 if ( ExtMenus.ml_First->em_Next ) {
  1258.                     MyFPrintf( file, "    move.l   %sWnd,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1259.                     MyFPrintf( file, "    move.l   %sMenus,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1260.                     MyFPrintf( file, "    jsr      SetMenuStrip(a6)\n" );
  1261.                 }
  1262.  
  1263.                 MyFPrintf( file, "    move.l  _GadToolsBase,a6\n" );
  1264.                 MyFPrintf( file, "    move.l  %sWnd,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1265.                 MyFPrintf( file, "    suba.l  a1,a1\n" );
  1266.                 MyFPrintf( file, "    jsr     GT_RefreshWindow(a6)\n" );
  1267.  
  1268.                 if ( ws_ZoomF ) {
  1269.                     MyFPrintf( file, "    move.w  #%ld,%sZoom\n", MainWindow->LeftEdge, &MainPrefs.pr_ProjectPrefix[0] );
  1270.                     MyFPrintf( file, "    move.w  #%ld,%sZoom+2\n", MainWindow->TopEdge, &MainPrefs.pr_ProjectPrefix[0] );
  1271.                     MyFPrintf( file, "    move.w  #%ld,%sZoom+4\n", MainWindow->Width, &MainPrefs.pr_ProjectPrefix[0] );
  1272.                     MyFPrintf( file, "    move.w  #%ld,%sZoom+6\n", MainWindow->Height, &MainPrefs.pr_ProjectPrefix[0] );
  1273.                 }
  1274.  
  1275.                 if ( WindowTxt ) {
  1276.                     MyFPrintf( file, "    move.l  _IntuitionBase,a6\n" );
  1277.                     MyFPrintf( file, "    move.l  %sWnd,a0\n", &MainPrefs.pr_ProjectPrefix[0] );
  1278.                     if ( NRAW )
  1279.                         MyFPrintf( file, "    move.l  wd_RPort(a0),a0\n" );
  1280.                     else
  1281.                         MyFPrintf( file, "    move.l  50(a0),a0\n" );
  1282.                     MyFPrintf( file, "    lea.l   %sText0,a1\n", &MainPrefs.pr_ProjectPrefix[0] );
  1283.                     MyFPrintf( file, "    moveq   #0,d0\n" );
  1284.                     MyFPrintf( file, "    moveq   #0,d1\n" );
  1285.                     MyFPrintf( file, "    jsr     PrintIText(a6)\n" );
  1286.                 }
  1287.  
  1288.                 MyFPrintf( file, "    moveq   #0,d0\n" );
  1289.                 MyFPrintf( file, "%sDone:\n    movem.l (sp)+,d1-d7/a0-a6\n    rts\n", &MainPrefs.pr_ProjectPrefix[0] );
  1290.  
  1291.                 MyFPrintf( file, "%sSError:\n    moveq   #1,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1292.                 MyFPrintf( file, "%sVError:\n    moveq   #2,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1293.  
  1294.                 if ( Gadgets.gl_First->en_Next ) {
  1295.                     MyFPrintf( file, "%sCError:\n    moveq   #3,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1296.                     MyFPrintf( file, "%sGError:\n    moveq   #4,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1297.                 }
  1298.  
  1299.                 MyFPrintf( file, "%sWError:\n    moveq   #5,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1300.                 if ( ExtMenus.ml_First->em_Next )
  1301.                     MyFPrintf( file, "%sMError:\n    moveq   #6,d0\n    bra.s   %sDone\n", &MainPrefs.pr_ProjectPrefix[0], &MainPrefs.pr_ProjectPrefix[0] );
  1302.  
  1303.                 MyFPrintf( file, "\n" );
  1304.  
  1305.                 WriteAsmCleanup( file );
  1306.  
  1307.                 MyFPrintf( file, "\n    end\n" );
  1308.  
  1309.                 Close( file );
  1310.  
  1311.                 file = 0l;
  1312.  
  1313.                 if ( IoErr())
  1314.                     MyRequest( "Oh oh...", "CONTINUE", "Write Error !" );
  1315.             }
  1316.         }
  1317.     }
  1318.  
  1319.     SetWindowTitles( MainWindow, MainWindowTitle, MainScreenTitle );
  1320.     RefreshWindow();
  1321.     if ( file )     Close( file );
  1322.     if ( ga_GenA )  FreeAslRequest( ga_GenA );
  1323.  
  1324.     ga_GenA = 0l;
  1325.  
  1326.     ClearMsgPort( MainWindow->UserPort );
  1327. }
  1328.